package com.kexilo.logging.service;

import com.kexilo.logging.domain.LogRecord;
import java.util.List;
import java.util.concurrent.CompletableFuture;

/**
 * 日志服务接口
 * 定义了日志记录的抽象接口，不依赖任何具体实现
 * 
 * @author Kexilo
 */
public interface LoggingService {
    
    /**
     * 记录操作日志
     * 
     * @param logRecord 日志记录
     */
    void log(LogRecord logRecord);
    
    /**
     * 异步记录操作日志
     * 
     * @param logRecord 日志记录
     * @return CompletableFuture
     */
    CompletableFuture<Void> logAsync(LogRecord logRecord);
    
    /**
     * 批量记录操作日志
     * 
     * @param logRecords 日志记录列表
     */
    void logBatch(List<LogRecord> logRecords);
    
    /**
     * 记录登录日志
     * 
     * @param username 用户名
     * @param success 是否成功
     * @param ip IP地址
     * @param userAgent 用户代理
     * @param message 消息
     */
    void logLogin(String username, boolean success, String ip, String userAgent, String message);
    
    /**
     * 记录安全日志
     * 
     * @param operation 操作
     * @param username 用户名
     * @param ip IP地址
     * @param details 详情
     */
    void logSecurity(String operation, String username, String ip, String details);
    
    /**
     * 检查服务是否可用
     * 
     * @return 是否可用
     */
    boolean isAvailable();
    
    /**
     * 获取服务名称
     * 
     * @return 服务名称
     */
    default String getServiceName() {
        return this.getClass().getSimpleName();
    }
    
    /**
     * 获取服务版本
     * 
     * @return 服务版本
     */
    default String getServiceVersion() {
        return "1.0.0";
    }
}
